package com.chen.controller;

import com.chen.pojo.common.PageResult;
import com.chen.pojo.dto.PartnerDto;
import com.chen.pojo.entry.Partner;
import com.chen.pojo.vo.PartnerVo;
import com.chen.service.PartnerService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * @author chen
 * @version 1.0
 * @create_date 2025/8/17
 * 合作商管理
 */
@Slf4j
@RestController
@RequestMapping("/api/user-service/partner")
@Tag(name = "合作商管理接口", description = "合作商相关操作接口")
public class PartnerController {
    @Autowired
    private PartnerService partnerService;

    /**
     * 分页查询
     *
     * @param pageIndex 起始页
     * @param pageSize  页大小
     * @param name      合作商名称
     * @return 查询结果
     */
    @GetMapping("/search")
    @Operation(summary = "分页查询合作商", description = "根据条件分页查询合作商信息")
    public PageResult<Partner> searchList(
            @Parameter(description = "起始页") Integer pageIndex,
            @Parameter(description = "页大小") Integer pageSize,
            @Parameter(description = "合作商名称") String name) {
        log.info("开始分页查询，当前页：{}，页面显示条数：{}，查询条件：合作商名称-{}", pageIndex, pageSize, name);
        return partnerService.searchList(pageIndex, pageSize, name);
    }

    /**
     * 新增合作商
     *
     * @param partnerDto 合作商基本信息
     * @return 结果
     */
    @PostMapping
    @Operation(summary = "新增合作商", description = "添加新的合作商信息")
    public Boolean addPartner(@Parameter(description = "合作商基本信息") @RequestBody PartnerDto partnerDto) {
        log.info("新增合作商：{}", partnerDto);
        return partnerService.addPartner(partnerDto);
    }

    /**
     * 根据id 查询合作商
     *
     * @param id 合作商id
     * @return 查询结果
     */
    @GetMapping("/{id}")
    @Operation(summary = "根据ID查询合作商", description = "根据合作商ID获取合作商详细信息")
    public PartnerVo getPartnerById(@Parameter(description = "合作商ID") @PathVariable Integer id) {
        log.info("查询id：{} 的合作商", id);
        return partnerService.getPartnerById(id);
    }

    /**
     * 更新合作商信息
     *
     * @param id         合作商id
     * @param partnerDto 合作商信息
     * @return 更新结果
     */
    @PutMapping("/{id}")
    @Operation(summary = "更新合作商信息", description = "根据合作商ID更新合作商信息")
    public Boolean updatePartner(@Parameter(description = "合作商ID") @PathVariable Integer id,
                                 @Parameter(description = "合作商信息") @RequestBody PartnerDto partnerDto) {
        log.info("修改合作商信息，合作商id：{}", id);
        return partnerService.updatePartner(id, partnerDto);
    }

    /**
     * 删除合作商的信息
     *
     * @param id 合作商id
     * @return result
     */
    @DeleteMapping("/{id}")
    @Operation(summary = "删除合作商", description = "根据合作商ID删除合作商信息")
    public Boolean deletePartner(@Parameter(description = "合作商ID") @PathVariable Integer id) {
        log.info("删除id：{}的合作商", id);
        return partnerService.deletePartner(id);
    }

    /**
     * 重置密码
     *
     * @param id 合作商id
     * @return
     */
    @PutMapping("/resetPwd/{id}")
    public Boolean updatePassword(@PathVariable Integer id) {
        log.info("重置合作商id：{}密码", id);
        return partnerService.updatePassword(id);
    }

    /**
     * 统计合作商数量
     *
     * @return 合作商数量
     */
    @GetMapping("/count")
    public Long getPartnerCount() {
        return partnerService.getPartnerCount();
    }
}
